开始之前:
1. 识别人脸输出相关数据
在人脸识别功能下,当人脸出现在HUSKYLENS 2屏幕中时,可以被检测和框出,从而获取检测到的人脸总数、指定人脸的相关数据。
I2C示例程序如下。
# -*- coding: UTF-8 -*-
# MindPlus
# Python
from unihiker import GUI
from pinpong.board import Board
from dfrobot_huskylensv2 import *
u_gui=GUI()
Board().begin()
huskylens = HuskylensV2_I2C()
huskylens.knock()
huskylens.switchAlgorithm(ALGORITHM_FACE_RECOGNITION)
line1=u_gui.draw_text(text="人脸总数:",x=0,y=0,font_size=20, color="#0000FF")
line2=u_gui.draw_text(text="靠中心的人脸:",x=0,y=40,font_size=20, color="#0000FF")
line3=u_gui.draw_text(text="第一个人脸ID:",x=0,y=80,font_size=20, color="#0000FF")
while True:
huskylens.getResult(ALGORITHM_FACE_RECOGNITION)
if (huskylens.available(ALGORITHM_FACE_RECOGNITION)):
line1.config(text=(str("人脸总数:") + str((huskylens.getCachedResultNum(ALGORITHM_FACE_RECOGNITION)))))
line2.config(text=(str("靠中心的人脸:") + str((huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION).ID if huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION) else -1))))
line3.config(text=(str("第一个人脸ID:") + str(huskylens.getCachedResultByIndex(ALGORITHM_FACE_RECOGNITION, 1-1).ID if huskylens.getCachedResultByIndex(ALGORITHM_FACE_RECOGNITION, 1-1) else -1)))
UART示例程序如下。
后续示例代码将仅提供I2C模式代码,如需使用UART模式,请仿照实例化huskylens的方法修改代码即可。
# -*- coding: UTF-8 -*-
# MindPlus
# Python
from unihiker import GUI
from pinpong.board import Board
from dfrobot_huskylensv2 import *
u_gui=GUI()
Board().begin()
huskylens = HuskylensV2_I2C()
huskylens.knock()
huskylens.switchAlgorithm(ALGORITHM_FACE_RECOGNITION)
line1=u_gui.draw_text(text="人脸总数:",x=0,y=0,font_size=20, color="#0000FF")
line2=u_gui.draw_text(text="靠中心的人脸:",x=0,y=40,font_size=20, color="#0000FF")
line3=u_gui.draw_text(text="第一个人脸ID:",x=0,y=80,font_size=20, color="#0000FF")
while True:
huskylens.getResult(ALGORITHM_FACE_RECOGNITION)
if (huskylens.available(ALGORITHM_FACE_RECOGNITION)):
line1.config(text=(str("人脸总数:") + str((huskylens.getCachedResultNum(ALGORITHM_FACE_RECOGNITION)))))
line2.config(text=(str("靠中心的人脸:") + str((huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION).ID if huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION) else -1))))
line3.config(text=(str("第一个人脸ID:") + str(huskylens.getCachedResultByIndex(ALGORITHM_FACE_RECOGNITION, 1-1).ID if huskylens.getCachedResultByIndex(ALGORITHM_FACE_RECOGNITION, 1-1) else -1)))
在Mind+中点击运行程序,等程序运行成功。
将HUSKYLENS 2的摄像头对准画面中的人脸分别学习,如何学习人脸详细操作请看:二哈识图 2 人脸识别功能说明
学习完成后,对准该人脸,可在M10屏幕上观察输出结果。
运行结果:如下,可以获取画面中检测到的人脸总数,不论该人脸是否已学习;可以指定获取靠近摄像头画面中心的人脸ID、第一个检测到的人脸ID(未学习过的人脸ID为0)。
2. 获取画面中指定人脸的详细数据
可以获取指定人脸的五官、位置数据,可以读取的人脸数据有:人脸ID、人脸名称、宽度、高度以及人脸中心点的X坐标位置和Y坐标位置、左/右眼X坐标、左/右眼Y坐标、左/右嘴角X坐标、左/右嘴角Y坐标、鼻子X/Y坐标位置。
如以下示例程序可以获取靠近摄像头中心画面的人脸的五官数据,未学习的人脸亦可获取。
# -*- coding: UTF-8 -*-
# MindPlus
# Python
from unihiker import GUI
from pinpong.board import Board
from dfrobot_huskylensv2 import *
u_gui=GUI()
Board().begin()
huskylens = HuskylensV2_I2C()
huskylens.knock()
huskylens.switchAlgorithm(ALGORITHM_FACE_RECOGNITION)
line1=u_gui.draw_text(text="靠中心的人脸ID:",x=0,y=0,font_size=18, color="#0000FF")
line2=u_gui.draw_text(text="其左眼坐标:",x=0,y=40,font_size=18, color="#0000FF")
line3=u_gui.draw_text(text="其右眼坐标:",x=0,y=80,font_size=18, color="#0000FF")
line4=u_gui.draw_text(text="左嘴角坐标:",x=0,y=120,font_size=18, color="#0000FF")
line5=u_gui.draw_text(text="右嘴角坐标:",x=0,y=160,font_size=18, color="#0000FF")
line6=u_gui.draw_text(text="其鼻子坐标:",x=0,y=200,font_size=18, color="#0000FF")
while True:
huskylens.getResult(ALGORITHM_FACE_RECOGNITION)
if (huskylens.available(ALGORITHM_FACE_RECOGNITION)):
line1.config(text=(str("靠中心的人脸ID:") + str((huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION).ID if huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION) else -1))))
line2.config(text=(str("其左眼坐标:") + str((str((huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION).leye_x if huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION) else -1)) + str((str(",") + str((huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION).leye_y if huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION) else -1))))))))
line3.config(text=(str("其右眼坐标:") + str((str((huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION).reye_x if huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION) else -1)) + str((str(",") + str((huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION).reye_y if huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION) else -1))))))))
line4.config(text=(str("左嘴角坐标:") + str((str((huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION).lmouth_x if huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION) else -1)) + str((str(",") + str((huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION).lmouth_y if huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION) else -1))))))))
line5.config(text=(str("右嘴角坐标:") + str((str((huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION).rmouth_x if huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION) else -1)) + str((str(",") + str((huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION).rmouth_y if huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION) else -1))))))))
line6.config(text=(str("其鼻子坐标:") + str((str((huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION).nose_x if huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION) else -1)) + str((str(",") + str((huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION).nose_y if huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION) else -1))))))))
**运行结果:**如下图,运行程序,M10屏幕上显示人脸ID号及该人脸的五官坐标数据。由于该人脸未学习,因此人脸ID为0。
除上述数据以外,还可以获取更多人脸数据,如画面中某个指定人脸的总数、该人脸的名称、第一个该人脸的相关数据。(未学习的人脸亦可获取以上数据)
以某个已学习的人脸为例,示例程序如下:
# -*- coding: UTF-8 -*-
# MindPlus
# Python
from unihiker import GUI
from pinpong.board import Board
from dfrobot_huskylensv2 import *
u_gui=GUI()
Board().begin()
huskylens = HuskylensV2_I2C()
huskylens.knock()
huskylens.switchAlgorithm(ALGORITHM_FACE_RECOGNITION)
line1=u_gui.draw_text(text="ID1的人脸总数:",x=0,y=0,font_size=18, color="#0000FF")
line2=u_gui.draw_text(text="ID1人脸名称:",x=0,y=40,font_size=18, color="#0000FF")
line3=u_gui.draw_text(text="第一个ID1人脸",x=0,y=80,font_size=18, color="#0000FF")
line4=u_gui.draw_text(text="的坐标:",x=0,y=110,font_size=18, color="#0000FF")
while True:
huskylens.getResult(ALGORITHM_FACE_RECOGNITION)
if (huskylens.available(ALGORITHM_FACE_RECOGNITION)):
if ((huskylens.getCachedResultByID(ALGORITHM_FACE_RECOGNITION, 1) is not None)):
line1.config(text=(str("ID1的人脸总数:") + str((huskylens.getCachedResultNumByID(ALGORITHM_FACE_RECOGNITION, 1)))))
line2.config(text=(str("ID1人脸名称:") + str((huskylens.getCachedResultByID(ALGORITHM_FACE_RECOGNITION, 1).name if huskylens.getCachedResultByID(ALGORITHM_FACE_RECOGNITION, 1) else -1))))
line4.config(text=(str("的坐标:") + str((str((huskylens.getCachedIndexResultByID(ALGORITHM_FACE_RECOGNITION, 1, 1-1).xCenter if huskylens.getCachedIndexResultByID(ALGORITHM_FACE_RECOGNITION, 1, 1-1) else -1)) + str((str(",") + str((huskylens.getCachedIndexResultByID(ALGORITHM_FACE_RECOGNITION, 1, 1-1).yCenter if huskylens.getCachedIndexResultByID(ALGORITHM_FACE_RECOGNITION, 1, 1-1) else -1))))))))
**运行结果:**如下图,运行程序,M10屏幕上显示画面中ID1人脸总数、该人脸的名称,第一个检测到的ID1人脸中心XY坐标。(人脸名称默认为“人脸”,设置名字操作,详见人脸识别功能说明-设置名字。)